package es.udc.acs.banco.util;


import java.util.logging.Level;

import es.udc.acs.banco.operations.DBBancoOperations;
import es.udc.acs.banco.sesion.ControlSesion;
import es.udc.acs.parser.ParserMensaje;
import es.udc.acs.utils.CodigosFAP;
import es.udc.acs.utils.FormateadorControl;
import es.udc.acs.utils.FormateadorDatos;
import es.udc.acs.utils.LoggerFile;
import es.udc.acs.utils.PropertiesFile;

public class GestorProperties {

	public static final String IDBANCO         = "idbanco";
	public static final String PUERTOBANCO     = "puerto";
	public static final String IDCONSORCIO     = "idconsorcio";
	public static final String PUERTOCONSORCIO = "consorcio";
	public static final String NUMCANALES      = "numcanales";

	// el numero del banco, se pide al iniciar
	private static String banco_num = "00";
	private static LoggerFile lg;
	
	private static final String BANCO_PUERTO_CONSORCIO = "127.000.000.001/2001"; 
	private static final String BANCO_PUERTO           = "127.000.000.001/21"; 
	private static final String BANCO_NUM_CANALES      = "10"; 
	private static final String CONSORCIO_ID           = "infenc00"; 
	private static final String BANCO_ID               = "infevg"; 

	
	private GestorProperties() {}
	
	public static String devolverPropiedad(String id) {
		
	    PropertiesFile conf;

		try {
			conf = new PropertiesFile("banco.properties");
			
			String propiedad = conf.getValue(id);
			
			if (id.equals(IDBANCO) && propiedad.length() != 6)
				return BANCO_ID+banco_num;
			
			if (id.equals(PUERTOBANCO) && propiedad.length() != 18)
				return BANCO_PUERTO+banco_num;		

			if (id.equals(IDCONSORCIO) && propiedad.length() != 8)
				return CONSORCIO_ID;
			
			if (id.equals(PUERTOCONSORCIO) && propiedad.length() != 20)
				return BANCO_PUERTO_CONSORCIO;
			
			if (id.equals(NUMCANALES)) {
				int ncan = Integer.parseInt(propiedad);
				if (ncan <1 || ncan>99) return BANCO_NUM_CANALES;
			}
			
			// si es correcto le añadimos el banco_num
			if (id.equals(IDBANCO))
				propiedad = propiedad+banco_num;
			if (id.equals(PUERTOBANCO))
				propiedad = propiedad+banco_num;
			
			return propiedad;

		} catch (Exception e) {
			
			if (id.equals(IDBANCO))
				return BANCO_ID+banco_num;
			
			if (id.equals(PUERTOBANCO))
				return BANCO_PUERTO+banco_num;		

			if (id.equals(IDCONSORCIO))
				return CONSORCIO_ID;
			
			if (id.equals(PUERTOCONSORCIO))
				return BANCO_PUERTO_CONSORCIO;
			
			if (id.equals(NUMCANALES)) 
				return BANCO_NUM_CANALES;
			
			return null;
		}
	}

	public static void setBancoNum(String num) {
		
		if (num.length() == 2)
			banco_num = num;
		
		lg = new LoggerFile("banco"+banco_num+".log");
	}

	public static LoggerFile getBancoLog() {
		return lg;
	}
	
	
	public static void tratarMensaje(String escrito,String mensaje) {
		
		lg.getLogger().log(Level.ALL,escrito+mensaje);		
		
		try {
			if (ControlSesion.obtenerSesion().isModoVisualizar())  {
				if (CodigosFAP.esControl(ParserMensaje.obtenerTipo(mensaje))) {
					FormateadorControl.formatearMensaje(mensaje);
				} else {
					FormateadorDatos.formatearMensaje(mensaje, true);
				}
			}
			
			DBBancoOperations.insertarLog(devolverPropiedad(IDBANCO), 
					                      mensaje);
		} catch (Exception e) {
			e.printStackTrace();
		}		
	}
	
}
